home *** CD-ROM | disk | FTP | other *** search
/ CD/PC Actual 31 / PC Actual CD 31.iso / dists / SRC / SLIBEXEC.AA / SLIBEXEC / libexec / rbootd / defs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-29  |  6.3 KB  |  185 lines

  1. /*
  2.  * Copyright (c) 1988, 1992 The University of Utah and the Center
  3.  *    for Software Science (CSS).
  4.  * Copyright (c) 1992, 1993
  5.  *    The Regents of the University of California.  All rights reserved.
  6.  *
  7.  * This code is derived from software contributed to Berkeley by
  8.  * the Center for Software Science of the University of Utah Computer
  9.  * Science Department.  CSS requests users of this software to return
  10.  * to css-dist@cs.utah.edu any improvements that they make and grant
  11.  * CSS redistribution rights.
  12.  *
  13.  * Redistribution and use in source and binary forms, with or without
  14.  * modification, are permitted provided that the following conditions
  15.  * are met:
  16.  * 1. Redistributions of source code must retain the above copyright
  17.  *    notice, this list of conditions and the following disclaimer.
  18.  * 2. Redistributions in binary form must reproduce the above copyright
  19.  *    notice, this list of conditions and the following disclaimer in the
  20.  *    documentation and/or other materials provided with the distribution.
  21.  * 3. All advertising materials mentioning features or use of this software
  22.  *    must display the following acknowledgement:
  23.  *    This product includes software developed by the University of
  24.  *    California, Berkeley and its contributors.
  25.  * 4. Neither the name of the University nor the names of its contributors
  26.  *    may be used to endorse or promote products derived from this software
  27.  *    without specific prior written permission.
  28.  *
  29.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  30.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  31.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  32.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  33.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  34.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  35.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  36.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  37.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  38.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  39.  * SUCH DAMAGE.
  40.  *
  41.  *    from: @(#)defs.h    8.1 (Berkeley) 6/4/93
  42.  *
  43.  * From: Utah Hdr: defs.h 3.1 92/07/06
  44.  * Author: Jeff Forys, University of Utah CSS
  45.  */
  46.  
  47. #include "rmp.h"
  48. #include "rmp_var.h"
  49.  
  50. /*
  51. **  Common #define's and external variables.  All other files should
  52. **  include this.
  53. */
  54.  
  55. /*
  56.  *  This may be defined in <sys/param.h>, if not, it's defined here.
  57.  */
  58. #ifndef    MAXHOSTNAMELEN
  59. #define    MAXHOSTNAMELEN 64
  60. #endif
  61.  
  62. /*
  63.  *  SIGUSR1 and SIGUSR2 are defined in <signal.h> for 4.3BSD systems.
  64.  */
  65. #ifndef SIGUSR1
  66. #define    SIGUSR1 SIGEMT
  67. #endif
  68. #ifndef SIGUSR2
  69. #define    SIGUSR2 SIGFPE
  70. #endif
  71.  
  72. /*
  73.  *  These can be faster & more efficient than strcmp()/strncmp()...
  74.  */
  75. #define    STREQN(s1,s2)        ((*s1 == *s2) && (strcmp(s1,s2) == 0))
  76. #define    STRNEQN(s1,s2,n)    ((*s1 == *s2) && (strncmp(s1,s2,n) == 0))
  77.  
  78. /*
  79.  *  Configuration file limitations.
  80.  */
  81. #define    C_MAXFILE    10        /* max number of boot-able files */
  82. #define    C_LINELEN    1024        /* max length of line */
  83.  
  84. /*
  85.  *  Direction of packet (used as argument to DispPkt).
  86.  */
  87. #define    DIR_RCVD    0
  88. #define    DIR_SENT    1
  89. #define    DIR_NONE    2
  90.  
  91. /*
  92.  *  These need not be functions, so...
  93.  */
  94. #define    FreeStr(str)    free(str)
  95. #define    FreeClient(cli)    free(cli)
  96. #define    GenSessID()    (++SessionID ? SessionID: ++SessionID)
  97.  
  98. /*
  99.  *  Converting an Ethernet address to a string is done in many routines.
  100.  *  Using `rmp.hp_hdr.saddr' works because this field is *never* changed;
  101.  *  it will *always* contain the source address of the packet.
  102.  */
  103. #define    EnetStr(rptr)    GetEtherAddr(&(rptr)->rmp.hp_hdr.saddr[0])
  104.  
  105. /*
  106.  *  Every machine we can boot will have one of these allocated for it
  107.  *  (unless there are no restrictions on who we can boot).
  108.  */
  109. typedef struct client_s {
  110.     u_int8_t        addr[RMP_ADDRLEN];    /* addr of machine */
  111.     char            *files[C_MAXFILE];    /* boot-able files */
  112.     struct client_s        *next;            /* ptr to next */
  113. } CLIENT;
  114.  
  115. /*
  116.  *  Every active connection has one of these allocated for it.
  117.  */
  118. typedef struct rmpconn_s {
  119.     struct rmp_packet    rmp;            /* RMP packet */
  120.     int            rmplen;            /* length of packet */
  121.     struct timeval        tstamp;            /* last time active */
  122.     int            bootfd;            /* open boot file */
  123.     struct rmpconn_s    *next;            /* ptr to next */
  124. } RMPCONN;
  125.  
  126. /*
  127.  *  All these variables are defined in "conf.c".
  128.  */
  129. extern    char    MyHost[];        /* this hosts' name */
  130. extern    pid_t    MyPid;            /* this processes' ID */
  131. extern    int    DebugFlg;        /* set true if debugging */
  132. extern    int    BootAny;        /* set true if we can boot anyone */
  133.  
  134. extern    char    *ConfigFile;        /* configuration file */
  135. extern    char    *DfltConfig;        /* default configuration file */
  136. extern    char    *DbgFile;        /* debug output file */
  137. extern    char    *PidFile;        /* file containing pid of server */
  138. extern    char    *BootDir;        /* directory w/boot files */
  139.  
  140. extern    FILE    *DbgFp;            /* debug file pointer */
  141. extern    char    *IntfName;        /* interface we are attached to */
  142.  
  143. extern    u_int16_t SessionID;        /* generated session ID */
  144.  
  145. extern    char    *BootFiles[];        /* list of boot files */
  146.  
  147. extern    CLIENT    *Clients;        /* list of addrs we'll accept */
  148. extern    RMPCONN    *RmpConns;        /* list of active connections */
  149.  
  150. extern    u_int8_t RmpMcastAddr[];    /* RMP multicast address */
  151.  
  152. void     AddConn __P((RMPCONN *));
  153. int     BootDone __P((RMPCONN *));
  154. void     BpfClose __P((void));
  155. char    *BpfGetIntfName __P((char **));
  156. int     BpfOpen __P((void));
  157. int     BpfRead __P((RMPCONN *, int));
  158. int     BpfWrite __P((RMPCONN *));
  159. void     DebugOff __P((int));
  160. void     DebugOn __P((int));
  161. void     DispPkt __P((RMPCONN *, int));
  162. void     DoTimeout __P((void));
  163. void     DspFlnm __P((u_int, char *));
  164. void     Exit __P((int));
  165. CLIENT    *FindClient __P((RMPCONN *));
  166. RMPCONN    *FindConn __P((RMPCONN *));
  167. void     FreeClients __P((void));
  168. void     FreeConn __P((RMPCONN *));
  169. void     FreeConns __P((void));
  170. int     GetBootFiles __P((void));
  171. char    *GetEtherAddr __P((u_int8_t *));
  172. CLIENT    *NewClient __P((u_int8_t *));
  173. RMPCONN    *NewConn __P((RMPCONN *));
  174. char    *NewStr __P((char *));
  175. u_int8_t *ParseAddr __P((char *));
  176. int     ParseConfig __P((void));
  177. void     ProcessPacket __P((RMPCONN *, CLIENT *));
  178. void     ReConfig __P((int));
  179. void     RemoveConn __P((RMPCONN *));
  180. int     SendBootRepl __P((struct rmp_packet *, RMPCONN *, char *[]));
  181. int     SendFileNo __P((struct rmp_packet *, RMPCONN *, char *[]));
  182. int     SendPacket __P((RMPCONN *));
  183. int     SendReadRepl __P((RMPCONN *));
  184. int     SendServerID __P((RMPCONN *));
  185.